/* 
 * 使用 slice 来重写first_word
 */

fn first_word(s: &str) -> &str { //............................返回一个&str 类型 字符串引用类型
    let bytes = s.as_bytes(); //...........................用as_bytes 方法将String 转化为字节数组
    for (i, &item) in bytes.iter().enumerate() { //....iter enumerate 方法，以元组(i, &item)的形式，返回集合中的每一个元素
        if item == b' ' { //......................................如果item等于空格，则返回i
            return &s[..i];
        }
    }
    &s[..]
}

fn main() {
    let mut s = String::from("hello world");
    let word: &str = first_word(&s); //.....................“s”被借用为不可变引用
    // s.clear(); //...........................................error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
    println!("'{}' first_word is '{}'", s, word);
    s.clear(); //...........................................使用之后，可以再次使用
}

// fn main() {
//     let my_string = String::from("hello world");

//     // first_word 中传入 `String` 的 slice
//     let word = first_word(&my_string[..]);

//     let my_string_literal = "hello world";

//     // first_word 中传入字符串字面值的 slice
//     let word = first_word(&my_string_literal[..]);

//     // 因为字符串字面值就是字符串 slice，
//     // 这样写也可以，即不使用 slice 语法！
//     let word = first_word(my_string_literal);
// }